package com.wetech.demo.web3j.contracts.accounterc7579hooked;

import io.reactivex.Flowable;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.web3j.abi.EventEncoder;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Address;
import org.web3j.abi.datatypes.Bool;
import org.web3j.abi.datatypes.CustomError;
import org.web3j.abi.datatypes.DynamicBytes;
import org.web3j.abi.datatypes.DynamicStruct;
import org.web3j.abi.datatypes.Event;
import org.web3j.abi.datatypes.Function;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.Utf8String;
import org.web3j.abi.datatypes.generated.Bytes1;
import org.web3j.abi.datatypes.generated.Bytes32;
import org.web3j.abi.datatypes.generated.Bytes4;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameter;
import org.web3j.protocol.core.RemoteCall;
import org.web3j.protocol.core.RemoteFunctionCall;
import org.web3j.protocol.core.methods.request.EthFilter;
import org.web3j.protocol.core.methods.response.BaseEventResponse;
import org.web3j.protocol.core.methods.response.Log;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.tx.Contract;
import org.web3j.tx.TransactionManager;
import org.web3j.tx.gas.ContractGasProvider;

/**
 * <p>Auto generated code.
 * <p><strong>Do not modify!</strong>
 * <p>Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>,
 * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the 
 * <a href="https://github.com/LFDT-web3j/web3j/tree/main/codegen">codegen module</a> to update.
 *
 * <p>Generated with web3j version 4.14.0.
 */
@SuppressWarnings("rawtypes")
public class AccountERC7579Hooked extends Contract {
    public static final String BINARY = "";

    private static String librariesLinkedBinary;

    public static final String FUNC_ACCOUNTID = "accountId";

    public static final String FUNC_ENTRYPOINT = "entryPoint";

    public static final String FUNC_EXECUTE = "execute";

    public static final String FUNC_EXECUTEFROMEXECUTOR = "executeFromExecutor";

    public static final String FUNC_getNonce = "getNonce";

    public static final String FUNC_HOOK = "hook";

    public static final String FUNC_INSTALLMODULE = "installModule";

    public static final String FUNC_ISMODULEINSTALLED = "isModuleInstalled";

    public static final String FUNC_ISVALIDSIGNATURE = "isValidSignature";

    public static final String FUNC_SUPPORTSEXECUTIONMODE = "supportsExecutionMode";

    public static final String FUNC_SUPPORTSMODULE = "supportsModule";

    public static final String FUNC_UNINSTALLMODULE = "uninstallModule";

    public static final String FUNC_VALIDATEUSEROP = "validateUserOp";

    public static final CustomError ACCOUNTUNAUTHORIZED_ERROR = new CustomError("AccountUnauthorized", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final CustomError ERC7579ALREADYINSTALLEDMODULE_ERROR = new CustomError("ERC7579AlreadyInstalledModule", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}));
    ;

    public static final CustomError ERC7579DECODINGERROR_ERROR = new CustomError("ERC7579DecodingError", 
            Arrays.<TypeReference<?>>asList());
    ;

    public static final CustomError ERC7579HOOKMODULEALREADYPRESENT_ERROR = new CustomError("ERC7579HookModuleAlreadyPresent", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final CustomError ERC7579MISMATCHEDMODULETYPEID_ERROR = new CustomError("ERC7579MismatchedModuleTypeId", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}));
    ;

    public static final CustomError ERC7579MISSINGFALLBACKHANDLER_ERROR = new CustomError("ERC7579MissingFallbackHandler", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Bytes4>() {}));
    ;

    public static final CustomError ERC7579UNINSTALLEDMODULE_ERROR = new CustomError("ERC7579UninstalledModule", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}));
    ;

    public static final CustomError ERC7579UNSUPPORTEDCALLTYPE_ERROR = new CustomError("ERC7579UnsupportedCallType", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Bytes1>() {}));
    ;

    public static final CustomError ERC7579UNSUPPORTEDEXECTYPE_ERROR = new CustomError("ERC7579UnsupportedExecType", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Bytes1>() {}));
    ;

    public static final CustomError ERC7579UNSUPPORTEDMODULETYPE_ERROR = new CustomError("ERC7579UnsupportedModuleType", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
    ;

    public static final CustomError FAILEDCALL_ERROR = new CustomError("FailedCall", 
            Arrays.<TypeReference<?>>asList());
    ;

    public static final CustomError OUTOFRANGEACCESS_ERROR = new CustomError("OutOfRangeAccess", 
            Arrays.<TypeReference<?>>asList());
    ;

    public static final Event ERC7579TRYEXECUTEFAIL_EVENT = new Event("ERC7579TryExecuteFail", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<DynamicBytes>() {}));
    ;

    public static final Event MODULEINSTALLED_EVENT = new Event("ModuleInstalled", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}));
    ;

    public static final Event MODULEUNINSTALLED_EVENT = new Event("ModuleUninstalled", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}));
    ;

    @Deprecated
    protected AccountERC7579Hooked(String contractAddress, Web3j web3j, Credentials credentials,
            BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    protected AccountERC7579Hooked(String contractAddress, Web3j web3j, Credentials credentials,
            ContractGasProvider contractGasProvider) {
        super(BINARY, contractAddress, web3j, credentials, contractGasProvider);
    }

    @Deprecated
    protected AccountERC7579Hooked(String contractAddress, Web3j web3j,
            TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    protected AccountERC7579Hooked(String contractAddress, Web3j web3j,
            TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        super(BINARY, contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public static List<ERC7579TryExecuteFailEventResponse> getERC7579TryExecuteFailEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = staticExtractEventParametersWithLog(ERC7579TRYEXECUTEFAIL_EVENT, transactionReceipt);
        ArrayList<ERC7579TryExecuteFailEventResponse> responses = new ArrayList<ERC7579TryExecuteFailEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ERC7579TryExecuteFailEventResponse typedResponse = new ERC7579TryExecuteFailEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.batchExecutionIndex = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.returndata = (byte[]) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static ERC7579TryExecuteFailEventResponse getERC7579TryExecuteFailEventFromLog(Log log) {
        Contract.EventValuesWithLog eventValues = staticExtractEventParametersWithLog(ERC7579TRYEXECUTEFAIL_EVENT, log);
        ERC7579TryExecuteFailEventResponse typedResponse = new ERC7579TryExecuteFailEventResponse();
        typedResponse.log = log;
        typedResponse.batchExecutionIndex = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        typedResponse.returndata = (byte[]) eventValues.getNonIndexedValues().get(1).getValue();
        return typedResponse;
    }

    public Flowable<ERC7579TryExecuteFailEventResponse> eRC7579TryExecuteFailEventFlowable(
            EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getERC7579TryExecuteFailEventFromLog(log));
    }

    public Flowable<ERC7579TryExecuteFailEventResponse> eRC7579TryExecuteFailEventFlowable(
            DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(ERC7579TRYEXECUTEFAIL_EVENT));
        return eRC7579TryExecuteFailEventFlowable(filter);
    }

    public static List<ModuleInstalledEventResponse> getModuleInstalledEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = staticExtractEventParametersWithLog(MODULEINSTALLED_EVENT, transactionReceipt);
        ArrayList<ModuleInstalledEventResponse> responses = new ArrayList<ModuleInstalledEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ModuleInstalledEventResponse typedResponse = new ModuleInstalledEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.moduleTypeId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.module = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static ModuleInstalledEventResponse getModuleInstalledEventFromLog(Log log) {
        Contract.EventValuesWithLog eventValues = staticExtractEventParametersWithLog(MODULEINSTALLED_EVENT, log);
        ModuleInstalledEventResponse typedResponse = new ModuleInstalledEventResponse();
        typedResponse.log = log;
        typedResponse.moduleTypeId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        typedResponse.module = (String) eventValues.getNonIndexedValues().get(1).getValue();
        return typedResponse;
    }

    public Flowable<ModuleInstalledEventResponse> moduleInstalledEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getModuleInstalledEventFromLog(log));
    }

    public Flowable<ModuleInstalledEventResponse> moduleInstalledEventFlowable(
            DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(MODULEINSTALLED_EVENT));
        return moduleInstalledEventFlowable(filter);
    }

    public static List<ModuleUninstalledEventResponse> getModuleUninstalledEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = staticExtractEventParametersWithLog(MODULEUNINSTALLED_EVENT, transactionReceipt);
        ArrayList<ModuleUninstalledEventResponse> responses = new ArrayList<ModuleUninstalledEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ModuleUninstalledEventResponse typedResponse = new ModuleUninstalledEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.moduleTypeId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.module = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static ModuleUninstalledEventResponse getModuleUninstalledEventFromLog(Log log) {
        Contract.EventValuesWithLog eventValues = staticExtractEventParametersWithLog(MODULEUNINSTALLED_EVENT, log);
        ModuleUninstalledEventResponse typedResponse = new ModuleUninstalledEventResponse();
        typedResponse.log = log;
        typedResponse.moduleTypeId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        typedResponse.module = (String) eventValues.getNonIndexedValues().get(1).getValue();
        return typedResponse;
    }

    public Flowable<ModuleUninstalledEventResponse> moduleUninstalledEventFlowable(
            EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getModuleUninstalledEventFromLog(log));
    }

    public Flowable<ModuleUninstalledEventResponse> moduleUninstalledEventFlowable(
            DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(MODULEUNINSTALLED_EVENT));
        return moduleUninstalledEventFlowable(filter);
    }

    public RemoteFunctionCall<String> accountId() {
        final Function function = new Function(FUNC_ACCOUNTID, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteFunctionCall<String> entryPoint() {
        final Function function = new Function(FUNC_ENTRYPOINT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteFunctionCall<TransactionReceipt> execute(byte[] mode, byte[] executionCalldata,
            BigInteger weiValue) {
        final Function function = new Function(
                FUNC_EXECUTE, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Bytes32(mode), 
                new org.web3j.abi.datatypes.DynamicBytes(executionCalldata)), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function, weiValue);
    }

    public RemoteFunctionCall<TransactionReceipt> executeFromExecutor(byte[] mode,
            byte[] executionCalldata, BigInteger weiValue) {
        final Function function = new Function(
                FUNC_EXECUTEFROMEXECUTOR, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Bytes32(mode), 
                new org.web3j.abi.datatypes.DynamicBytes(executionCalldata)), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function, weiValue);
    }

    public RemoteFunctionCall<BigInteger> getNonce(BigInteger key) {
        final Function function = new Function(FUNC_getNonce, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Uint192(key)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteFunctionCall<BigInteger> getNonce() {
        final Function function = new Function(FUNC_getNonce, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteFunctionCall<String> hook() {
        final Function function = new Function(FUNC_HOOK, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteFunctionCall<TransactionReceipt> installModule(BigInteger moduleTypeId,
            String module, byte[] initData) {
        final Function function = new Function(
                FUNC_INSTALLMODULE, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Uint256(moduleTypeId), 
                new org.web3j.abi.datatypes.Address(160, module), 
                new org.web3j.abi.datatypes.DynamicBytes(initData)), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<Boolean> isModuleInstalled(BigInteger moduleTypeId, String module,
            byte[] data) {
        final Function function = new Function(FUNC_ISMODULEINSTALLED, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Uint256(moduleTypeId), 
                new org.web3j.abi.datatypes.Address(160, module), 
                new org.web3j.abi.datatypes.DynamicBytes(data)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteFunctionCall<byte[]> isValidSignature(byte[] hash, byte[] signature) {
        final Function function = new Function(FUNC_ISVALIDSIGNATURE, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Bytes32(hash), 
                new org.web3j.abi.datatypes.DynamicBytes(signature)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bytes4>() {}));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<Boolean> supportsExecutionMode(byte[] encodedMode) {
        final Function function = new Function(FUNC_SUPPORTSEXECUTIONMODE, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Bytes32(encodedMode)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteFunctionCall<Boolean> supportsModule(BigInteger moduleTypeId) {
        final Function function = new Function(FUNC_SUPPORTSMODULE, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Uint256(moduleTypeId)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteFunctionCall<TransactionReceipt> uninstallModule(BigInteger moduleTypeId,
            String module, byte[] deInitData) {
        final Function function = new Function(
                FUNC_UNINSTALLMODULE, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Uint256(moduleTypeId), 
                new org.web3j.abi.datatypes.Address(160, module), 
                new org.web3j.abi.datatypes.DynamicBytes(deInitData)), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> validateUserOp(PackedUserOperation userOp,
            byte[] userOpHash, BigInteger missingAccountFunds) {
        final Function function = new Function(
                FUNC_VALIDATEUSEROP, 
                Arrays.<Type>asList(userOp, 
                new org.web3j.abi.datatypes.generated.Bytes32(userOpHash), 
                new org.web3j.abi.datatypes.generated.Uint256(missingAccountFunds)), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    @Deprecated
    public static AccountERC7579Hooked load(String contractAddress, Web3j web3j,
            Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new AccountERC7579Hooked(contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    @Deprecated
    public static AccountERC7579Hooked load(String contractAddress, Web3j web3j,
            TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new AccountERC7579Hooked(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    public static AccountERC7579Hooked load(String contractAddress, Web3j web3j,
            Credentials credentials, ContractGasProvider contractGasProvider) {
        return new AccountERC7579Hooked(contractAddress, web3j, credentials, contractGasProvider);
    }

    public static AccountERC7579Hooked load(String contractAddress, Web3j web3j,
            TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        return new AccountERC7579Hooked(contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public static RemoteCall<AccountERC7579Hooked> deploy(Web3j web3j, Credentials credentials,
            ContractGasProvider contractGasProvider) {
        return deployRemoteCall(AccountERC7579Hooked.class, web3j, credentials, contractGasProvider, getDeploymentBinary(), "");
    }

    @Deprecated
    public static RemoteCall<AccountERC7579Hooked> deploy(Web3j web3j, Credentials credentials,
            BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(AccountERC7579Hooked.class, web3j, credentials, gasPrice, gasLimit, getDeploymentBinary(), "");
    }

    public static RemoteCall<AccountERC7579Hooked> deploy(Web3j web3j,
            TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        return deployRemoteCall(AccountERC7579Hooked.class, web3j, transactionManager, contractGasProvider, getDeploymentBinary(), "");
    }

    @Deprecated
    public static RemoteCall<AccountERC7579Hooked> deploy(Web3j web3j,
            TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(AccountERC7579Hooked.class, web3j, transactionManager, gasPrice, gasLimit, getDeploymentBinary(), "");
    }

    public static void linkLibraries(List<Contract.LinkReference> references) {
        librariesLinkedBinary = linkBinaryWithReferences(BINARY, references);
    }

    private static String getDeploymentBinary() {
        if (librariesLinkedBinary != null) {
            return librariesLinkedBinary;
        } else {
            return BINARY;
        }
    }

    public static class PackedUserOperation extends DynamicStruct {
        public String sender;

        public BigInteger nonce;

        public byte[] initCode;

        public byte[] callData;

        public byte[] accountGasLimits;

        public BigInteger preVerificationGas;

        public byte[] gasFees;

        public byte[] paymasterAndData;

        public byte[] signature;

        public PackedUserOperation(String sender, BigInteger nonce, byte[] initCode,
                byte[] callData, byte[] accountGasLimits, BigInteger preVerificationGas,
                byte[] gasFees, byte[] paymasterAndData, byte[] signature) {
            super(new org.web3j.abi.datatypes.Address(160, sender), 
                    new org.web3j.abi.datatypes.generated.Uint256(nonce), 
                    new org.web3j.abi.datatypes.DynamicBytes(initCode), 
                    new org.web3j.abi.datatypes.DynamicBytes(callData), 
                    new org.web3j.abi.datatypes.generated.Bytes32(accountGasLimits), 
                    new org.web3j.abi.datatypes.generated.Uint256(preVerificationGas), 
                    new org.web3j.abi.datatypes.generated.Bytes32(gasFees), 
                    new org.web3j.abi.datatypes.DynamicBytes(paymasterAndData), 
                    new org.web3j.abi.datatypes.DynamicBytes(signature));
            this.sender = sender;
            this.nonce = nonce;
            this.initCode = initCode;
            this.callData = callData;
            this.accountGasLimits = accountGasLimits;
            this.preVerificationGas = preVerificationGas;
            this.gasFees = gasFees;
            this.paymasterAndData = paymasterAndData;
            this.signature = signature;
        }

        public PackedUserOperation(Address sender, Uint256 nonce, DynamicBytes initCode,
                DynamicBytes callData, Bytes32 accountGasLimits, Uint256 preVerificationGas,
                Bytes32 gasFees, DynamicBytes paymasterAndData, DynamicBytes signature) {
            super(sender, nonce, initCode, callData, accountGasLimits, preVerificationGas, gasFees, paymasterAndData, signature);
            this.sender = sender.getValue();
            this.nonce = nonce.getValue();
            this.initCode = initCode.getValue();
            this.callData = callData.getValue();
            this.accountGasLimits = accountGasLimits.getValue();
            this.preVerificationGas = preVerificationGas.getValue();
            this.gasFees = gasFees.getValue();
            this.paymasterAndData = paymasterAndData.getValue();
            this.signature = signature.getValue();
        }
    }

    public static class ERC7579TryExecuteFailEventResponse extends BaseEventResponse {
        public BigInteger batchExecutionIndex;

        public byte[] returndata;
    }

    public static class ModuleInstalledEventResponse extends BaseEventResponse {
        public BigInteger moduleTypeId;

        public String module;
    }

    public static class ModuleUninstalledEventResponse extends BaseEventResponse {
        public BigInteger moduleTypeId;

        public String module;
    }
}
